﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;
using ShoppingCart.Business.Entity;

namespace ShoppingCart.DataAccess
{
    public class ParametroData : Singleton<ParametroData>
    {
        private const string Nombre = "Parametros";

        private XDocument CrearArchivo(string path)
        {
            var docXml = new XDocument(
                new XDeclaration("1.0", "utf-8", "yes"),
                new XElement(Nombre));
            docXml.Save(path, SaveOptions.None);
            return docXml;
        }

        public List<Parametro> Listar(string path)
        {
            path += Nombre + ".xml";
            var parametros = new List<Parametro>();
            if(File.Exists(path))
            {
                var docXml = XDocument.Load(path);
                var elementos = from p in docXml.Descendants("Parametro") select p;
                foreach (var elemento in elementos)
                {
                    parametros.Add(new Parametro
                    {
                        IdParametro = elemento.Attribute("ID").Value,
                        Cantidad = Convert.ToInt32(elemento.Element("Cantidad").Value),
                        Descuento = Convert.ToDecimal(elemento.Element("Descuento").Value)
                    });
                }
            }
            return parametros;
        }

        public void Guardar(string path, List<Parametro> parametros)
        {
            path +=  Nombre + ".xml";
            var docXml = File.Exists(path) ? XDocument.Load(path) : CrearArchivo(path);
            docXml.Element(Nombre).RemoveNodes();

            foreach (var parametro in parametros)
            {
                docXml.Element(Nombre).Add(
                    new XElement("Parametro",
                                 new XAttribute("ID", parametro.IdParametro),
                                 new XElement("Cantidad", parametro.Cantidad),
                                 new XElement("Descuento", parametro.Descuento)));
            }
            docXml.Save(path);
        }
    }
}
